Skip to content

Migration guide from external idp to embedded idp#658

Open
jnfrati wants to merge 1 commit intomainfrom
feat/external-to-embedded-idp-migration-guide
Open

Migration guide from external idp to embedded idp#658
jnfrati wants to merge 1 commit intomainfrom
feat/external-to-embedded-idp-migration-guide

Conversation

@jnfrati
Copy link

@jnfrati jnfrati commented Mar 17, 2026

No description provided.

6. Under **Token Settings**, enable both:
- User roles inside ID token
- User Info inside ID token
7. Create a `connector.json` file:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where and with what

- **Type:** Web
- **Authentication Method:** Code
4. Set the redirect URI to `https://<your-management-domain>/oauth2/callback`.
5. Save and copy the **Client ID** and **Client Secret**.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... after creating the new application.

Comment on lines +122 to +158
"redirectURI": "https://<your-management-domain>/oauth2/callback"
}
}
```

You will pass this file in Step 5 with the `--idp-seed-info` flag.

See also: [Zitadel setup guide](/selfhosted/identity-providers/zitadel).

### Custom / Unsupported Provider (JumpCloud, etc.)

For providers without built-in detection, create a generic OIDC `connector.json`:

```json
{
"type": "oidc",
"name": "My Provider",
"id": "my-provider",
"config": {
"issuer": "https://idp.example.com",
"clientID": "my-client-id",
"clientSecret": "my-client-secret",
"redirectURI": "https://<your-management-domain>/oauth2/callback"
}
}
```

You will pass this file in Step 5 with the `--idp-seed-info` flag.

---

## Step 3: Stop the Management Server

**Systemd / bare-metal:**

```bash
sudo systemctl stop netbird-management
Copy link
Collaborator

@TechHutTV TechHutTV Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think anyone really runs this without docker

Comment on lines +122 to +198
"redirectURI": "https://<your-management-domain>/oauth2/callback"
}
}
```

You will pass this file in Step 5 with the `--idp-seed-info` flag.

See also: [Zitadel setup guide](/selfhosted/identity-providers/zitadel).

### Custom / Unsupported Provider (JumpCloud, etc.)

For providers without built-in detection, create a generic OIDC `connector.json`:

```json
{
"type": "oidc",
"name": "My Provider",
"id": "my-provider",
"config": {
"issuer": "https://idp.example.com",
"clientID": "my-client-id",
"clientSecret": "my-client-secret",
"redirectURI": "https://<your-management-domain>/oauth2/callback"
}
}
```

You will pass this file in Step 5 with the `--idp-seed-info` flag.

---

## Step 3: Stop the Management Server

**Systemd / bare-metal:**

```bash
sudo systemctl stop netbird-management
```

**Docker Compose:**

```bash
docker compose stop management
```

---

## Step 4: Back Up Your Data

The tool creates `management.json.bak` automatically, but always make your own backups.

<Warning>
Do not skip this step. The migration modifies user IDs in the database. A manual backup is your only recovery path if something goes wrong.
</Warning>

**Systemd / bare-metal (SQLite):**

```bash
cp /var/lib/netbird/store.db /var/lib/netbird/store.db.bak
cp /etc/netbird/management.json /etc/netbird/management.json.bak
```

**Docker Compose (SQLite in a named volume):**

```bash
# Identify the volume name
VOLUME_NAME=$(docker volume ls --format '{{ .Name }}' | grep -i management)
echo "Volume: $VOLUME_NAME"

# Get the host path
VOLUME_PATH=$(docker volume inspect "$VOLUME_NAME" --format '{{ .Mountpoint }}')
echo "Path: $VOLUME_PATH"

# Verify store.db exists, then back up
sudo ls "$VOLUME_PATH/store.db"
sudo cp "$VOLUME_PATH/store.db" "$VOLUME_PATH/store.db.bak"
cp ~/netbird/management.json ~/netbird/management.json.bak
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cp ./management.json *

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants